#画面は600*450 左右に100、ずつ開ける。マスは30*30
#左右の空間は両方三等分し、真中が左右移動、右に「やり直す」「あきらめる」
game.loading do |loader|
loader.add :window, :system => "window"
loader.add :gui_item, :system => "gui_item"
loader.add :bac, 63#背景(まだない)
loader.add :space, 274#左右の空間
loader.add :br, 268#右
loader.add :bl, 267#左
loader.add :bu, 266#上
loader.add :bd, 265#下
loader.add :by, 275
loader.add :ba, 288
loader.add :ball_i, 287#ボール
loader.add :map_i,297
loader.add :select,293
loader.add :ste,294
loader.add :bp,296
end
#関数
Variable = {}
def SV(a,b)
Variable[a] = b
end
def GV(a)
Variable[a]
end
game.on_init do
set_window_image :window
set_gui_image :gui_item
speak "転がり行く玉 Ver0.9"
SV(:ste,[[1,1,1,1,1,1,1,1,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0],
[0,1,0,0,0,0,0,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0]])
SV(:sele,[0,0])
scene_change :select
end
scene :select do |scene|
scene.on_init do
scene.add :image, :texture => :select, :align => :fullscreen#背景の表示
#ステージ生成
y = 0
while y < 8
x = 0
while x < 11
a = scene.add :image, :template => :ste, :position => [x*50+150,y*50+50]
#画像の種類
a.copy_rect GV(:ste)[y][x],0
x = x + 1
end
y = y + 1
end
bal = scene.add :image, :template => :ball2, :position => [(GV(:sele)[1]*50)+150,(GV(:sele)[0]*50)+50]
bal.copy_rect rand(2), 0
space = scene.add :collision, :texture =>:space, :position => [0, 0], :scale => [1.0, 1.0]
#上.左右.下.設定.決定
bu = scene.add :image, :texture =>:bu, :position => [0, 0], :scale => [1.0, 1.0]
bl = scene.add :image, :texture =>:bl, :position => [0, 150], :scale => [1.0, 1.0]
bd = scene.add :image, :texture =>:bd, :position => [0, 300], :scale => [1.0, 1.0]
bp = scene.add :image, :texture =>:bp, :position => [700, 0], :scale => [1.0, 1.0]
br = scene.add :image, :texture =>:br, :position => [700, 150], :scale => [1.0, 1.0]
ba = scene.add :image, :texture =>:ba, :position => [700, 300], :scale => [1.0, 1.0]
mx = 0
my = 0
bu.event :on_touch_down do |event|
mx = 0
my = -1
end
bl.event :on_touch_down do |event|
mx = -1
my = 0
end
bd.event :on_touch_down do |event|
mx = 0
my = 1
end
br.event :on_touch_down do |event|
mx = 1
my = 0
end
bp.event :on_touch_down do |event|
scene_change :Setting
end
ba.event :on_touch_down do |event|
game.change_project "start_menu"
end
space.event :on_step do |event|
if mx == 0 && my == 0
else
a = 1
GV(:sele)[0] += my
GV(:sele)[1] += mx
#画面外には落ちない
if GV(:sele)[0] > 7 || GV(:sele)[0] < 0 || GV(:sele)[1] > 10 || GV(:sele)[1] < 0
GV(:sele)[0] -= my
GV(:sele)[1] -= mx
end
bal.set_data :x, GV(:sele)[1]*50+150
bal.set_data :y, GV(:sele)[0]*50+50
bal.change_motion :move
mx = 0
my = 0
end
end
end
end
#ball x,y,色,状態,動いたか,壁に乗ったか
scene :Setting do |scene|
SV(:ball_i,[1,1])
SV(:k,0)
if GV(:sele)[0] == 0
if GV(:sele)[1] == 0
speak "このゲームは、玉を転がしてゴールへ導くパズルゲームです。"
speak "左右上下のボタンを押すと、すべての玉がすべて同時に動きます。"
speak "玉の上にある柄の地面がゴールです。"
SV(:k,2)
SV(:ball,[[7, 7, 0, 0 ,0, 0],[9, 7, 1, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00, 9,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 8,00,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,01,00,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,01,00,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 1
speak "そのまま進むと玉が落ちてしまって\nクリアができないときは"
speak "壁に引っ掛けて2つの玉の距離を変えれば通ることができます。"
SV(:k,2)
SV(:ball,[[4, 7, 0, 0 ,0, 0],[7, 7, 1, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00, 9,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 8,00,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,01,00,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,01,01,01,01,02,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 2
speak "色のついた床は、\n同じ色の玉しか通れません"
speak "色の違う玉は落ちてしまうので、\n通ろうとしてはいけません。"
SV(:k,2)
SV(:ball,[[4, 7, 0, 0 ,0, 0],[7, 7, 1, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,04,04,04, 9,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,04, 8,05,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,04,01,05,02,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,01,01,01,01,02,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 3
speak "小さくて四角いのはスイッチです。"
speak "スイッチを押すと、一部の壁・床・空間が変化します"
SV(:k,2)
SV(:ball,[[5, 7, 0, 0 ,0, 0],[8, 7, 1, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 8,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,01,02,02,02,02,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,26,01,01,01,23, 9,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,01,14,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 4
speak "一つの玉がスイッチを押したとき、\n壁に変形する場所に玉があると"
speak "玉が壁の上に乗ることができ、\nそのまま壁に乗って隣の壁に移動できます。"
SV(:k,2)
SV(:ball,[[7, 6, 0, 0 ,0, 0],[10, 7, 1, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 8,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 2,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,23,02,02,02,02,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,01,01,14,01,24, 9,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,01,01,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 5
speak "玉が棘にぶつかると、\nその玉は消えてしまいます。"
speak "ですが、緑の玉をぶつけると\n逆に棘を消すことができます。"
SV(:k,2)
SV(:ball,[[5, 7, 0, 0 ,0, 0],[8, 7, 1, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 8,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00, 2,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,23,02,02,02,02,00,00,00,00,00,00,00,00],
[00,00,00,02,01,01,15,15,01,14,01,24, 9,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,01,01,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 6
speak "ボロい床は一度通ると穴が開き,\nボロい壁は普通の床になります。"
speak "青い球は穴をあけずに通れます。"
speak "なお、今回出てくる茶色のゴールは\nすべての玉がゴール可能です。"
SV(:k,3)
SV(:ball,[[5, 6, 0, 0 ,0, 0],[7, 8, 1, 0 ,0, 0],[8, 7, 2, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,13,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,18,18,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,02,02,02,24,17,02,02,02,00,00,00,00,00,00,00,00],
[00,00,00,00,01,15,15,15,17,14,01,02,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,01,01,01,02,00,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,01,01,01,02,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 7
speak "氷の地面はすべります。\n赤い球は穴を氷を溶かすことができます。"
speak "滑らせてクリアに導くこともあるので\nすぐに溶かさないほうがいいです"
SV(:k,3)
SV(:ball,[[5, 6, 0, 0 ,0, 0],[7, 8, 1, 0 ,0, 0],[8, 7, 2, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,15,13,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,02,01,01,19,19,02,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,19,19,19,02,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,01,01,01,01,01,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,01,01,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 8
speak "壁の上に棘があることや、\n壁の上が滑るものがあります。"
speak "滑る氷壁は氷の壁と\n壁が凍ったものがあます。"
speak "氷壁は赤玉で溶かすと床になり\n凍った壁は溶かすと壁になります"
SV(:k,2)
SV(:ball,[[5, 6, 0, 0 ,0, 0],[5, 7, 1, 0 ,0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,13,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,02,02,20,28,24,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,02,02,20,28,24,14,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
end
elsif GV(:sele)[0] == 1
if GV(:sele)[1] == 3
SV(:k,3)
SV(:ball,[[7, 4, 0, 0 ,0, 0],[9, 6, 0, 0, 0, 0],[8, 9, 0, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,01, 8,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,00,02,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,01,01,01,01,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,01,01,00,01,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,00,01,01,01,02,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,01,02,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,01,00,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,01,01,01,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
end
elsif GV(:sele)[0] == 2
if GV(:sele)[1] == 1
SV(:k,3)
SV(:ball,[[7, 2, 0, 0 ,0, 0],[6, 7, 1, 0, 0, 0],[7, 7, 2, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,03,03,03,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,03,24,01,24,03,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,03,24,23,24,03,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02, 8,02,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,03,24,14, 9,14,24,03,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,24,14,00,14,24,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,23,14,14,14,23,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,23,24,23,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,04,00,24,23,24,00,04,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,04,04,10,04,04,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 9
SV(:k,2)
SV(:ball,[[9, 7, 1, 0 ,0, 0],[9, 9, 2, 0, 0, 0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,24,23, 9,23,24,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,23,14,23,14,23,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,02,23,02,23,02,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,24,24,04,24,24,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,01,24,05,24,01,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,14,01,23,01,14,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,02,02,01,02,02,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,02,01,01,01,02,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,00,00,00,00,00,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,02,02,10,02,02,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
elsif GV(:sele)[1] == 10
SV(:k,2)
SV(:ball,[[9,6,1,0,0,0],[9,9,0,0,0,0]])
SV(:map,[[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,04,04,04,04,04,04,04,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,03,03, 9,03,03,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00, 8, 5, 5,23, 5, 5, 8,00,00,00,00,00,00,00],
[00,00,00,00,00,00,02,02,23,14,23,02,02,00,00,00,00,00,00,00],
[00,00,00,00,00,00,23,05,01,23,01,05,23,00,00,00,00,00,00,00],
[00,00,00,00,00,00,14,05,01,01,01,05,14,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,05,01,01,01,05,01,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,24,01,14,01,24,01,00,00,00,00,00,00,00],
[00,00,00,00,00,00,01,23,05,01,05,23,01,00,00,00,00,00,00,00],
[00,00,00,00,00,00, 9,01,01,01,01,01, 9,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00],
[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]])
end
#elsif GV(:sele)[0] == 3
end
if GV(:k) == 0
speak "ここのステージはまだありません"
scene_change :select
end
SV(:map_i,[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
scene.add :image, :texture => :bac, :align => :fullscreen#背景の表示
scene_change :main
end
xx = 0
yy = 0
# メイン
scene :main do |scene|
scene.on_init do
wall = []
wak = 0
#ステージ生成
y = 0
while y < 15
x = 0
while x < 20
if GV(:map)[y][x] != 0
GV(:map_i)[y][x] = scene.add :image, :template => :map, :position => [x*30+100,y*30]
#画像の種類
GV(:map_i)[y][x].copy_rect GV(:map)[y][x]-1,1
a = GV(:map)[y][x]
if a == 23 || a == 24 || a == 25 || a == 26
wall.push([x,y])
wak += 1
end
end
x = x + 1
end
y = y + 1
end
#玉画像生成,玉設定
k = GV(:k)
i = 0
while i < k
GV(:ball_i)[i] = scene.add :image, :template => :ball, :position => [(GV(:ball)[i][0]*30)+100,(GV(:ball)[i][1]*30)]
GV(:ball_i)[i].copy_rect GV(:ball)[i][2], 0
i = i + 1
end
gk = 0#ゴールした玉数
nk = 0#なくなった玉数
mx = 0
my = 0
scene.add :image, :texture => :bac, :align => :fullscreen#背景の表示
space = scene.add :collision, :texture =>:space, :position => [0, 0], :scale => [1.0, 1.0]
#上.左右.下.やり直す.あきらめる
bu = scene.add :image, :texture =>:bu, :position => [0, 0], :scale => [1.0, 1.0]
bl = scene.add :image, :texture =>:bl, :position => [0, 150], :scale => [1.0, 1.0]
bd = scene.add :image, :texture =>:bd, :position => [0, 300], :scale => [1.0, 1.0]
by = scene.add :image, :texture =>:by, :position => [700, 0], :scale => [1.0, 1.0]
br = scene.add :image, :texture =>:br, :position => [700, 150], :scale => [1.0, 1.0]
ba = scene.add :image, :texture =>:ba, :position => [700, 300], :scale => [1.0, 1.0]
t = scene.text :position => [105, 5]
t.set_text_area_size 300, 332
t.set_font_point_size 28
t.set_color 0, 0, 0, 255
t.set_text "転がり行く玉"
te = "転がり行く玉"
bu.event :on_touch_down do |event|#上
mx = 0
my = -1
end
bl.event :on_touch_down do |event|#左
mx = -1
my = 0
end
bd.event :on_touch_down do |event|#下
mx = 0
my = 1
end
br.event :on_touch_down do |event|#右
mx = 1
my = 0
end
by.event :on_touch_down do |event|
scene_change :Setting
end
ba.event :on_touch_down do |event|
scene_change :select
end
space.event :on_step do |event|
if mx == 0 && my == 0
else
swi = false
i = 0
mbx = [0,0]
mby = [0,0]
while i < k
sb = false#滑ったかどうか
if GV(:ball)[i][4] != -1
b = GV(:map)[GV(:ball)[i][1]][GV(:ball)[i][0]]
if b == 2|| b == 18 || b == 20 || b == 24 || b == 28
GV(:ball)[i][5] = 1#壁に乗っている
else
GV(:ball)[i][5] = 0
end
mbx[i] = GV(:ball)[i][0]
mby[i] = GV(:ball)[i][1]
GV(:ball)[i][0] += mx
GV(:ball)[i][1] += my
GV(:ball)[i][3] = 1#動いた
#画面外には落ちない
if GV(:ball)[i][0] > 19 || GV(:ball)[i][0] < 0 || GV(:ball)[i][1] > 14 || GV(:ball)[i][1] < 0
GV(:ball)[i][0] -= mx
GV(:ball)[i][1] -= my
end
a = GV(:map)[GV(:ball)[i][1]][GV(:ball)[i][0]]
if a == 0 || (2 < a && a < 8) || a == 26
g = a-3
if g != GV(:ball)[i][2] || a == 0 || a == 26
GV(:ball)[i][4] = -1
te = te + "\n玉" + (i+1).to_s + ":落下"
nk = nk + 1
end
elsif 7 < a && a < 14
g = a-8
if g == GV(:ball)[i][2] || a == 13
GV(:ball)[i][4] = -1
te = te + "\n玉" + (i+1).to_s + ":ゴール"
gk = gk + 1
end
elsif a == 15 || a == 16
if GV(:ball)[i][2] == 1
GV(:map)[GV(:ball)[i][1]][GV(:ball)[i][0]] = 1
GV(:map_i)[GV(:ball)[i][1]][GV(:ball)[i][0]].copy_rect 0,1
else
GV(:ball)[i][4] = -1
te = te + "\n玉" + (i+1).to_s + ":棘接触"
nk = nk + 1
end
elsif a == 14
swi = true
elsif a == 19 || a == 20 || a == 28#滑る床
if GV(:ball)[i][2] == 0
if a == 19 || a == 20
GV(:map)[GV(:ball)[i][1]][GV(:ball)[i][0]] = 1
GV(:map_i)[GV(:ball)[i][1]][GV(:ball)[i][0]].copy_rect 0,1
elsif a == 28
GV(:map)[GV(:ball)[i][1]][GV(:ball)[i][0]] = 2
GV(:map_i)[GV(:ball)[i][1]][GV(:ball)[i][0]].copy_rect 1,1
end
else
sb = true
i = i - 1
end
end
#壁
if (a == 2|| a == 18 || b == 20 || a == 24 || b == 28) && GV(:ball)[i][5] == 0 && !sb
GV(:ball)[i][0] -= mx
GV(:ball)[i][1] -= my
GV(:ball)[i][3] = 0
end
end
i = i + 1
end
i = 0
while i < k
#球の重なり判定
lop = true
while lop
i2 = 0
lop = false
while i2 < k
i3 = 0
while i3 < k
if GV(:ball)[i2][0] == GV(:ball)[i3][0] && GV(:ball)[i2][1] == GV(:ball)[i3][1] && GV(:ball)[i2][3] == 1
if i2 != i3
GV(:ball)[i2][0] -= mx
GV(:ball)[i2][1] -= my
GV(:ball)[i2][3] = 0
lop = true
end
end
i3 = i3 + 1
end
i2 = i2 + 1
end
end
i = i + 1
end
i = 0
while i < k
if GV(:ball)[i][3] == 1 && GV(:ball)[i][2] != 2
if GV(:map)[mby[i]][mbx[i]] == 17
GV(:map)[mby[i]][mbx[i]] = 0
GV(:map_i)[mby[i]][mbx[i]].copy_rect GV(:map)[mby[i]][mbx[i]]-1,1
elsif GV(:map)[mby[i]][mbx[i]] == 18
GV(:map)[mby[i]][mbx[i]] = 1
GV(:map_i)[mby[i]][mbx[i]].copy_rect GV(:map)[mby[i]][mbx[i]]-1,1
end
end
i += 1
end
mx = 0
my = 0
#スイッチ
if swi
i2 = 0
while i2 < wak
x = wall[i2][0]
y = wall[i2][1]
if GV(:map)[y][x] == 24
GV(:map)[y][x] = 23
elsif GV(:map)[y][x] == 23
GV(:map)[y][x] = 24
elsif GV(:map)[y][x] == 25
GV(:map)[y][x] = 26
i3 = 0
while i3 < k
if GV(:ball)[i3][1] == y && GV(:ball)[i3][0] == x
GV(:ball)[i][0] = -1
te = te + "\n玉" + (i+1).to_s + ":落下"
nk = nk + 1
end
i3 += 1
end
elsif GV(:map)[y][x] == 26
GV(:map)[y][x] = 25
end
GV(:map_i)[y][x].copy_rect GV(:map)[y][x]-1,1
i2 = i2 + 1
end
end
#移動
i = 0
while i < k
xx = GV(:ball)[i][0]*30+100
yy = GV(:ball)[i][1]*30
GV(:ball_i)[i].set_data :x, xx
GV(:ball_i)[i].set_data :y, yy
if GV(:ball)[i][4] != -1
GV(:ball_i)[i].change_motion :move
else
GV(:ball_i)[i].change_motion :move2
GV(:ball)[i][0] = -1
GV(:ball)[i][1] = -1
end
i = i + 1
end
end#動きここまで
if gk == GV(:k)
speak "クリア!"
scene_change :select
elsif nk > 0
speak "ゲームオーバー"
scene_change :Setting
end
t.set_text te.to_s
end
end
end
sprite_template :ball do |st|
st.texture :ball_i
st.src_size 30, 30
st.dest_size 30, 30
st.center_offset 30, 30
st.layer_order 10
st.copy_rect 0, 0
# キャラモーション
st.motion :move do |commands|
commands.loop false
commands.move_to(lambda do |st| st.get_data :x end,
lambda do |st| st.get_data :y end, 5)
commands.wait_motion
end
st.motion :move2 do |commands|
commands.loop false
commands.move_to(lambda do |st| st.get_data :x end,
lambda do |st| st.get_data :y end, 5)
commands.wait_motion
commands.proc_call do |st| st.delete end
end
end
#選択肢のボール
sprite_template :ball2 do |st|
st.texture :ball_i
st.src_size 30, 30
st.dest_size 50, 50
st.center_offset 30, 30
st.layer_order 10
st.copy_rect 0, 0
# キャラモーション
st.motion :move do |commands|
commands.loop false
commands.move_to(lambda do |st| st.get_data :x end,
lambda do |st| st.get_data :y end, 5)
commands.wait_motion
end
end
sprite_template :map do |st|
st.texture :map_i
st.src_size 30, 32
st.dest_size 30, 32
st.center_offset 30, 30
st.layer_order 10
st.copy_rect 0, 0
end
sprite_template :ste do |st|
st.texture :ste
st.src_size 50, 50
st.dest_size 50, 50
st.center_offset 30, 30
st.layer_order 10
st.copy_rect 0, 0
end